//reducer 函数是一个 『纯函数』
let countReducer = (state=100, action) => {
  //根据 action 对象的值, 通过函数返回值, 来更新 state 的值
  switch(action.type){
    case 'incre':
      return state + action.payload;
    case 'decre':
      return state - action.payload;
    //default 语句不能省略, 因为初始化的时候, 会执行该函数, 通过返回值初始化内部状态
    default:
      return state;
  }
}

//暴露 reducer 函数
export default countReducer;

//封装创建 action 对象的函数 
export function increAction(payload){
  return {
    type: 'incre',
    payload: payload
  }
}

//封装创建 decre 的函数   
export let decreAction = payload => ({ type: 'decre', payload: payload });

//封装异步的 action creator
export let asyncIncreAction = (payload) => {
  //dispatch 执行该函数时, 会将自身作为参数传递给该函数
  return dispatch => {
    setTimeout(() => {
      dispatch(increAction(payload));
    }, 1000)
  }
}

